import { defineStore } from 'pinia'
import { ref, computed } from 'vue'

export const useCartStore = defineStore('cart', () => {
  const cartItems = ref<CartItem[]>([])

  // 从本地存储加载购物车数据
  if (localStorage.getItem('cart')) {
    cartItems.value = JSON.parse(localStorage.getItem('cart')!)
  }

  const addToCart = (item: CartItem) => {
    const existingItemIndex = cartItems.value.findIndex(cartItem => cartItem.id === item.id)
    if (existingItemIndex >= 0) {
      cartItems.value[existingItemIndex].num += item.num // 更新数量
    } else {
      cartItems.value.push(item)
    }
    // 更新本地存储
    localStorage.setItem('cart', JSON.stringify(cartItems.value))
  }

  const removeFromCart = (id: number) => {
    cartItems.value = cartItems.value.filter(item => item.id !== id)
    // 更新本地存储
    localStorage.setItem('cart', JSON.stringify(cartItems.value))
  }

  // 更新商品数量
  const updateItemQuantity = (id: number, quantity: number) => {
    const item = cartItems.value.find(cartItem => cartItem.id === id)
    if (item) {
      item.num = quantity // 更新数量
      // 更新本地存储
      localStorage.setItem('cart', JSON.stringify(cartItems.value))
    }
  }

  // 计算购物车商品总数
  const totalQuantity = computed(() => {
    return cartItems.value.reduce((total, item) => total + item.num, 0)
  })

  return { cartItems, addToCart, removeFromCart, updateItemQuantity, totalQuantity }
})

interface CartItem {
  id: number
  item: object
  num: number
}